package code08_常用类.枚举;

/**
 * @author 黄衡熙
 * @version 1.0
 */
public enum Season {

    // 由于枚举类只能在内部访问,外部无法访问
    // 如果在内部没有访问,则该枚举的存在将没有意义
    // 因此,必须在内部创建对应的枚举对象
    // 要求此处创建的对象外部可以直接访问,且不能修改对象的值
    // 即:该对象必须是静态常量
    // 理论上来讲,该对象必须通过下面的方式进行创建
    // public static final Season SPRING = new Season("春天",1,3);
    // 但是,在枚举中,已经帮我们自动进行了部分修饰,某些内容我们在定义的时候需要省略
    // 简单来讲:所有固定不可更改的内容全部省略,枚举自动添加
    // 枚举中的值可以存在多个,每一个值代表一个对象,多个对象之间以逗号分隔
    SPRING("春天",1,3),
    SUMMER("夏天",4,6),
    AUTUMN("秋天",7,9),
    WINTER("冬天",10,12),
    // 如果调用无参构造方法,可以省略括号
    ALL
    ;
    private String name;    // 季节名称
    private int startMonth; // 季节开始的月份
    private int endMonth;   // 季节结束的月份

    // 对于枚举类,其构造方法不允许外部访问,只能内部访问
    // 因此,构造方法的修饰符必须使用private
    // private修饰符可以省略,默认就是private
    // private Season(){}
    Season(){

    }

    Season(String name,int startMonth,int endMonth){
        this.name = name;
        this.startMonth = startMonth;
        this.endMonth = endMonth;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", startMonth=" + startMonth +
                ", endMonth=" + endMonth +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getStartMonth() {
        return startMonth;
    }

    public void setStartMonth(int startMonth) {
        this.startMonth = startMonth;
    }

    public int getEndMonth() {
        return endMonth;
    }

    public void setEndMonth(int endMonth) {
        this.endMonth = endMonth;
    }
}